package cn.interceptor;

import cn.action.PrivilegeAction;
import cn.domain.Privilege;
import cn.domain.Role;
import cn.domain.User;
import cn.service.Impl.PrivilegeServiceImpl;
import cn.service.PrivilegeService;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import org.apache.struts2.ServletActionContext;

import java.util.List;
import java.util.Set;

/**
 * Created by Administrator on 2017/3/30 0030.
 */
public class CheckPrivilegeInterceptor extends AbstractInterceptor {
    @Override
    public String intercept(ActionInvocation ai) throws Exception {
        User user = (User) ServletActionContext.getRequest().getSession().getAttribute("user");
        String name = ai.getInvocationContext().getName();
        //对以UI结尾的地址进行加工
        if(name.endsWith("Ui")){
                name=name.substring(0,name.length()-2);
        }
        if (user == null) {
            // 一 、用户未登录
            if (name.equals("user_login")) {
                //a、访问登录页面，请求，放行
                ai.invoke();
            } else {
                //b、访问其他页面，让他登录
                return "Login";
            }
        } else {
            if(name!=null||name.equals("")){
                //遍历所有权限，判断top等是否存在，不存在则放行
                //获取顶级部门
                List<Privilege> lists = (List<Privilege>) ServletActionContext.getRequest().getSession().getAttribute("PrivilegesFinAll");
                for (Privilege list : lists) {
                    boolean i=name.equals(list.getUrl()) ;
                    if (name.equals(list.getUrl())) {
                        //二 、用户已登录
                        boolean p = user.booleanUrl(name);
                        if (p) {
                            //a、该用户有权限，放行
                            ai.invoke();
                        } else {
                            //b、该用户没有权限
                            return "noPrivilege";
                        }
                    }
                }
            }
            }
        //放行方法
        return ai.invoke();
    }
}
